// utils/request.ts
import axios, {
  InternalAxiosRequestConfig,
  AxiosResponse,
  AxiosHeaders,
} from "axios";
import { Message, Modal } from "@arco-design/web-vue";
import { getToken } from "@/utils/auth";
// 创建 axios 实例
const service = axios.create({
  // baseURL: import.meta.env.VITE_API_BASE_URL, // 从环境变量获取 API 基础路径
});


// // 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 可以在这里添加请求头，例如 token
    const token = getToken();

    if (!config.headers) {
      config.headers = new AxiosHeaders();
    }
    if (token) {
      config.headers["token"] = `${token}`;
    }
    return config;
  },
  (error: any) => {
    console.error("请求错误:", error);
    return Promise.reject(error);
  }
);

// // 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    const res = response.data;
    // 根据业务逻辑判断响应状态
    if (res.code !== 200) {
      if (res.code == 201) {
        return Promise.reject(Message.error(res.msg));
      } else if (res.code == 202) {
        return Promise.reject(Message.error(res.msg));
      } else if (res.code == 203) {
        return Promise.reject(Message.error(res.msg));
      } else if (res.code == 205) {
        return Promise.reject(Message.error(res.msg));
      } else if (res.code == 401) {
        localStorage.clear();
        window.location.href = '/login';
        return Promise.reject(Message.error(res.msg));
        
      } else {
        return Promise.reject(Message.error(res.msg));
      }
    } else {
      return res.data;
    }
  },
  (error: any) => {
    // 处理响应错误
    if (error.response) {
      // 请求已发送，服务器返回了非 2xx 的状态码
      const { status, data } = error.response;
      console.error(
        `请求失败，状态码: ${status}，错误信息: ${data.message || "未知错误"}`
      );
    } else if (error.request) {
      // 请求已发送，但没有收到响应
      console.error("请求已发送，但没有收到响应");
    } else {
      // 在设置请求时发生了错误
      console.error("设置请求时发生错误:", error.message);
    }
    return Promise.reject(error);
  }
);

export default service;
